package com.um2.mauction.java;

import java.io.IOException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

import com.um2.mauction.entity.Categorie;
import com.um2.mauction.entity.Produit;
import com.um2.mauction.entity.Utilisateur;
import com.um2.mauction.entity.Vente;
import com.um2.mauction.session.impl.CategorieManagerBean;
import com.um2.mauction.session.impl.ProduitManagerBean;
import com.um2.mauction.session.impl.UserManagerBean;
import com.um2.mauction.session.impl.VenteManagerBean;
import com.um2.mauction.session.remote.CategorieManagerRemote;
import com.um2.mauction.session.remote.ProduitManagerRemote;
import com.um2.mauction.session.remote.UserManagerRemote;
import com.um2.mauction.session.remote.VenteManagerRemote;

public class CreateSampleDataAction extends Action 
{
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
	throws IOException, ServletException 
	{
		ActionForward resultat = mapping.findForward("success");
		ActionErrors errors = new ActionErrors();
		// Session Beans

		UserManagerRemote user_manager=null;
		CategorieManagerRemote cat_manager = null;
		ProduitManagerRemote product_manager=null;
		VenteManagerRemote sale_manager=null;

		try 
		{
			InitialContext ic = new InitialContext();

			product_manager = (ProduitManagerRemote) ic.lookup(ProduitManagerBean.RemoteJNDIName);
			sale_manager = (VenteManagerRemote) ic.lookup(VenteManagerBean.RemoteJNDIName);
			user_manager=(UserManagerRemote) ic.lookup(UserManagerBean.RemoteJNDIName);
			cat_manager =(CategorieManagerRemote) ic.lookup(CategorieManagerBean.RemoteJNDIName);

			if(product_manager==null || sale_manager==null )
			{
				errors.add(ActionErrors.GLOBAL_MESSAGE,new ActionMessage("CreateSample.beansNotFound"));
				resultat = new ActionForward(mapping.getInput());
			}
			else
			{	
				//Création des instances et persitance dans la BD

				// Manipulation des références objet (non modifiables car transientes)

				Utilisateur u = new Utilisateur("dufmatt@free.fr","secret","dufourcq","matthieu","montpellier","dufmatt@free");
				int id_user = user_manager.addUtilisateur(u);

				Categorie c1 = new Categorie("Véhicule");	
				int id_cat1 = cat_manager.addCategorie(c1);

				Categorie c2 = new Categorie("Instrument");	
				int id_cat2 = cat_manager.addCategorie(c2);

				Produit p1 = new Produit("VTT Sun","/images/vtt.jpg", "VTT de grand marque","bon état général", null,null);
				int id_prod1 = product_manager.addProduit(p1);

				Produit p2 = new Produit("Guitare Fender","/images/fender.jpg", "La mythique stratocaster","excellent état", null,null);
				int id_prod2 = product_manager.addProduit(p2);

				Vente v1 = new Vente(new Float(10), new Float(150),"01/02/2008",45,1,null,null);
				int id_sale1 = sale_manager.addVente(v1);

				Vente v2 = new Vente(new Float(5), new Float(2350),"20/10/2007",65,1,null,null);
				int id_sale2 = sale_manager.addVente(v2);

				// Manipulation des références "bd" (modifiables)

				Categorie cat1 = cat_manager.getCategorie(id_cat1);
				Categorie cat2 = cat_manager.getCategorie(id_cat2);

				Produit prod1 = product_manager.getProduit(id_prod1);
				Produit prod2 = product_manager.getProduit(id_prod2);				

				Vente vente1=sale_manager.getVente(id_sale1);
				Vente vente2=sale_manager.getVente(id_sale2);

				Utilisateur user=user_manager.getUtilisateur(id_user);

				prod1.setCategorie(cat1);
				prod1.setVente(vente1);	

				prod2.setCategorie(cat2);
				prod2.setVente(vente2);

				cat1.getProduits().add(prod1);				
				cat2.getProduits().add(prod2);	

				vente1.setItem(prod1);
				vente1.setSeller(user);

				vente2.setItem(prod2);	
				vente2.setSeller(user);

				user.getVentes().add(vente1);			
				user.getVentes().add(vente2);

				cat_manager.mergeCategorie(cat1);
				cat_manager.mergeCategorie(cat2);
				product_manager.mergeProduit(prod1);
				product_manager.mergeProduit(prod2);
				sale_manager.mergeVente(vente1);
				sale_manager.mergeVente(vente2);
				user_manager.mergeUtilisateur(user);

				System.out.println(Math.random()*200);
			}
		} 
		catch(NamingException e)
		{
			errors.add(ActionErrors.GLOBAL_MESSAGE,new ActionMessage("ajoutprod.statefulBean.notBound"));
			resultat = new ActionForward(mapping.getInput());
		}

		if (!errors.isEmpty())
			saveErrors(request, errors);	
		return resultat;		
	}
}